<?xml version="1.0" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>X509_PUBKEY_new</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<link rev="made" href="mailto:root@localhost" />
</head>

<body>



<ul id="index">
  <li><a href="#NAME">NAME</a></li>
  <li><a href="#SYNOPSIS">SYNOPSIS</a></li>
  <li><a href="#DESCRIPTION">DESCRIPTION</a></li>
  <li><a href="#NOTES">NOTES</a></li>
  <li><a href="#RETURN-VALUES">RETURN VALUES</a></li>
  <li><a href="#SEE-ALSO">SEE ALSO</a></li>
  <li><a href="#COPYRIGHT">COPYRIGHT</a></li>
</ul>

<h1 id="NAME">NAME</h1>

<p>X509_PUBKEY_new, X509_PUBKEY_free, X509_PUBKEY_set, X509_PUBKEY_get0, X509_PUBKEY_get, d2i_PUBKEY, i2d_PUBKEY, d2i_PUBKEY_bio, d2i_PUBKEY_fp, i2d_PUBKEY_fp, i2d_PUBKEY_bio, X509_PUBKEY_set0_param, X509_PUBKEY_get0_param - SubjectPublicKeyInfo public key functions</p>

<h1 id="SYNOPSIS">SYNOPSIS</h1>

<pre><code>#include &lt;openssl/x509.h&gt;

X509_PUBKEY *X509_PUBKEY_new(void);
void X509_PUBKEY_free(X509_PUBKEY *a);

int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey);
EVP_PKEY *X509_PUBKEY_get0(X509_PUBKEY *key);
EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key);

EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length);
int i2d_PUBKEY(EVP_PKEY *a, unsigned char **pp);

EVP_PKEY *d2i_PUBKEY_bio(BIO *bp, EVP_PKEY **a);
EVP_PKEY *d2i_PUBKEY_fp(FILE *fp, EVP_PKEY **a);

int i2d_PUBKEY_fp(FILE *fp, EVP_PKEY *pkey);
int i2d_PUBKEY_bio(BIO *bp, EVP_PKEY *pkey);

int X509_PUBKEY_set0_param(X509_PUBKEY *pub, ASN1_OBJECT *aobj,
                           int ptype, void *pval,
                           unsigned char *penc, int penclen);
int X509_PUBKEY_get0_param(ASN1_OBJECT **ppkalg,
                           const unsigned char **pk, int *ppklen,
                           X509_ALGOR **pa, X509_PUBKEY *pub);</code></pre>

<h1 id="DESCRIPTION">DESCRIPTION</h1>

<p>The <b>X509_PUBKEY</b> structure represents the ASN.1 <b>SubjectPublicKeyInfo</b> structure defined in RFC5280 and used in certificates and certificate requests.</p>

<p>X509_PUBKEY_new() allocates and initializes an <b>X509_PUBKEY</b> structure.</p>

<p>X509_PUBKEY_free() frees up <b>X509_PUBKEY</b> structure <b>a</b>. If <b>a</b> is NULL nothing is done.</p>

<p>X509_PUBKEY_set() sets the public key in <b>*x</b> to the public key contained in the <b>EVP_PKEY</b> structure <b>pkey</b>. If <b>*x</b> is not NULL any existing public key structure will be freed.</p>

<p>X509_PUBKEY_get0() returns the public key contained in <b>key</b>. The returned value is an internal pointer which <b>MUST NOT</b> be freed after use.</p>

<p>X509_PUBKEY_get() is similar to X509_PUBKEY_get0() except the reference count on the returned key is incremented so it <b>MUST</b> be freed using EVP_PKEY_free() after use.</p>

<p>d2i_PUBKEY() and i2d_PUBKEY() decode and encode an <b>EVP_PKEY</b> structure using <b>SubjectPublicKeyInfo</b> format. They otherwise follow the conventions of other ASN.1 functions such as d2i_X509().</p>

<p>d2i_PUBKEY_bio(), d2i_PUBKEY_fp(), i2d_PUBKEY_bio() and i2d_PUBKEY_fp() are similar to d2i_PUBKEY() and i2d_PUBKEY() except they decode or encode using a <b>BIO</b> or <b>FILE</b> pointer.</p>

<p>X509_PUBKEY_set0_param() sets the public key parameters of <b>pub</b>. The OID associated with the algorithm is set to <b>aobj</b>. The type of the algorithm parameters is set to <b>type</b> using the structure <b>pval</b>. The encoding of the public key itself is set to the <b>penclen</b> bytes contained in buffer <b>penc</b>. On success ownership of all the supplied parameters is passed to <b>pub</b> so they must not be freed after the call.</p>

<p>X509_PUBKEY_get0_param() retrieves the public key parameters from <b>pub</b>, <b>*ppkalg</b> is set to the associated OID and the encoding consists of <b>*ppklen</b> bytes at <b>*pk</b>, <b>*pa</b> is set to the associated AlgorithmIdentifier for the public key. If the value of any of these parameters is not required it can be set to <b>NULL</b>. All of the retrieved pointers are internal and must not be freed after the call.</p>

<h1 id="NOTES">NOTES</h1>

<p>The <b>X509_PUBKEY</b> functions can be used to encode and decode public keys in a standard format.</p>

<p>In many cases applications will not call the <b>X509_PUBKEY</b> functions directly: they will instead call wrapper functions such as X509_get0_pubkey().</p>

<h1 id="RETURN-VALUES">RETURN VALUES</h1>

<p>If the allocation fails, X509_PUBKEY_new() returns <b>NULL</b> and sets an error code that can be obtained by <a href="../man3/ERR_get_error.html">ERR_get_error(3)</a>.</p>

<p>Otherwise it returns a pointer to the newly allocated structure.</p>

<p>X509_PUBKEY_free() does not return a value.</p>

<p>X509_PUBKEY_get0() and X509_PUBKEY_get() return a pointer to an <b>EVP_PKEY</b> structure or <b>NULL</b> if an error occurs.</p>

<p>X509_PUBKEY_set(), X509_PUBKEY_set0_param() and X509_PUBKEY_get0_param() return 1 for success and 0 if an error occurred.</p>

<h1 id="SEE-ALSO">SEE ALSO</h1>

<p><a href="../man3/d2i_X509.html">d2i_X509(3)</a>, <a href="../man3/ERR_get_error.html">ERR_get_error(3)</a>, <a href="../man3/X509_get_pubkey.html">X509_get_pubkey(3)</a>,</p>

<h1 id="COPYRIGHT">COPYRIGHT</h1>

<p>Copyright 2016 The OpenSSL Project Authors. All Rights Reserved.</p>

<p>Licensed under the OpenSSL license (the &quot;License&quot;). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <a href="https://www.openssl.org/source/license.html">https://www.openssl.org/source/license.html</a>.</p>


</body>

</html>


